﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NB.MGJ.Log
{
    public interface ILoggerProvider
    {
        /// <summary>
        /// 初始化
        /// </summary>
        /// <param name="name"></param>
        void Init(string name);

        /// <summary>
        /// 初始化
        /// </summary>
        /// <param name="type"></param>
        void Init(Type type);

        /// <summary>
        /// 是否调试模式
        /// </summary>
        bool IsDebugEnabled { get; }

        /// <summary>
        /// 是否消息模式
        /// </summary>
        bool IsInfoEnabled { get; }

        /// <summary>
        /// 是否警告模式
        /// </summary>
        bool IsWarnEnabled { get; }

        /// <summary>
        /// 是否错误模式
        /// </summary>
        bool IsErrorEnabled { get; }

        /// <summary>
        /// 是否系统崩溃模式
        /// </summary>
        bool IsFatalEnabled { get; }

        /// <summary>
        /// 记录Debug信息
        /// </summary>
        /// <param name="message"></param>
        void Debug(object message);

        /// <summary>
        /// 记录Debug信息
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        void Debug(object message, System.Exception exception);

        /// <summary>
        /// 记录Debug信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        void DebugFormat(string format, object arg0);

        /// <summary>
        /// 记录Debug信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        void DebugFormat(string format, object arg0, object arg1);

        /// <summary>
        /// 记录Debug信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        /// <param name="arg2"></param>
        void DebugFormat(string format, object arg0, object arg1, object arg2);

        /// <summary>
        /// 记录Debug信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void DebugFormat(string format, params object[] args);

        /// <summary>
        /// 记录Debug信息
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void DebugFormat(IFormatProvider provider, string format, params object[] args);

        /// <summary>
        /// 记录Info信息
        /// </summary>
        /// <param name="message"></param>
        void Info(object message);

        /// <summary>
        /// 记录Info信息
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        void Info(object message, System.Exception exception);

        /// <summary>
        /// 记录Info信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        void InfoFormat(string format, object arg0);

        /// <summary>
        /// 记录Info信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        void InfoFormat(string format, object arg0, object arg1);

        /// <summary>
        /// 记录Info信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        /// <param name="arg2"></param>
        void InfoFormat(string format, object arg0, object arg1, object arg2);

        /// <summary>
        /// 记录Info信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void InfoFormat(string format, params object[] args);

        /// <summary>
        /// 记录Info信息
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void InfoFormat(IFormatProvider provider, string format, params object[] args);

        /// <summary>
        /// 记录Warning信息
        /// </summary>
        /// <param name="message"></param>
        void Warn(object message);

        /// <summary>
        /// 记录Warning信息
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        void Warn(object message, System.Exception exception);

        /// <summary>
        /// 记录Warning信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        void WarnFormat(string format, object arg0);

        /// <summary>
        /// 记录Warning信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        void WarnFormat(string format, object arg0, object arg1);

        /// <summary>
        /// 记录Warning信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        /// <param name="arg2"></param>
        void WarnFormat(string format, object arg0, object arg1, object arg2);

        /// <summary>
        /// 记录Warning信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void WarnFormat(string format, params object[] args);

        /// <summary>
        /// 记录Warning信息
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void WarnFormat(IFormatProvider provider, string format, params object[] args);

        /// <summary>
        /// 记录Error信息
        /// </summary>
        /// <param name="message"></param>
        void Error(object message);

        /// <summary>
        /// 记录Error信息
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        void Error(object message, System.Exception exception);

        /// <summary>
        /// 记录Error信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        void ErrorFormat(string format, object arg0);

        /// <summary>
        /// 记录Error信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        void ErrorFormat(string format, object arg0, object arg1);

        /// <summary>
        /// 记录Error信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        /// <param name="arg2"></param>
        void ErrorFormat(string format, object arg0, object arg1, object arg2);

        /// <summary>
        /// 记录Error信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void ErrorFormat(string format, params object[] args);

        /// <summary>
        /// 记录Error信息
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void ErrorFormat(IFormatProvider provider, string format, params object[] args);

        /// <summary>
        /// 记录Fatal信息
        /// </summary>
        /// <param name="message"></param>
        void Fatal(object message);

        /// <summary>
        /// 记录Fatal信息
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        void Fatal(object message, System.Exception exception);

        /// <summary>
        /// 记录Fatal信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        void FatalFormat(string format, object arg0);

        /// <summary>
        /// 记录Fatal信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        void FatalFormat(string format, object arg0, object arg1);

        /// <summary>
        /// 记录Fatal信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        /// <param name="arg2"></param>
        void FatalFormat(string format, object arg0, object arg1, object arg2);

        /// <summary>
        /// 记录Fatal信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void FatalFormat(string format, params object[] args);

        /// <summary>
        /// 记录Fatal信息
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void FatalFormat(IFormatProvider provider, string format, params object[] args);
    }
}
